package dao;

import java.sql.SQLException;
import java.util.ArrayList;

import pojo.ItemAttr;

public class ItemDao extends DbDao{
  
    /**
     * 对没有参数的查询的重载 
     */
    public boolean select() {
        String sql  = String.format("SELECT * FROM `%s`", ItemAttr.TableName);
        return this.query(sql);
    }
    
    /**
     * 得到一行记录 
     */
    public ItemAttr fetch() {
        try {
            while(this._resultSet.next()) {
                return this.genItemAttr();
            }
            return null;
        } catch(Exception ex) {
            return null;
        }
    }
   
    /**
     * 得到所有的查询结果集  
     */
    public ArrayList<ItemAttr> fetchAll() {
        try {
            ArrayList<ItemAttr> itemList  = new ArrayList<ItemAttr>();
            while(this._resultSet.next()) {
                itemList.add(this.genItemAttr()); 
            }
            return itemList;
        } catch(Exception ex) {
            System.out.println("Error: " + ex.getMessage());
            return null;
        }
    }
    
    /**
     * 添加投票项目的重载
     * 
     * @param ItemAttr itemAttr 投票项目属性对象
     * @return boolean true or false 是否添加成功
     */
    public boolean insert(ItemAttr itemAttr) {
        try {
            String sql  = String.format("INSERT INTO `%s` " +
                                        "(`item_id`, `item_name`, " +
                                        "`item_poll`, `create_time`)" +
                                        " VALUES " +
                                        "(NULL, '%s', '%d', '%s')",
                                        ItemAttr.TableName,
                                        itemAttr.getItemName(),
                                        itemAttr.getItemPoll(),
                                        itemAttr.getCreateTime());
            return this._db.insert(sql);
        } catch(Exception ex) {
            return false;
        }
    }
   
    /**
     * 更新数据的重载，参数为投票项目的属性对象 
     * 
     * @param itemAttr 投票项目属性对象
     * @return true or false 是否更新成功
     */
    public boolean update(ItemAttr itemAttr) {
        try {
            String sql  = String.format("UPDATE `%s` SET " +
                                        "`item_name` = %s," +
                                        "`item_poll` = %d," +
                                        "`create_time` = '%s'" +
                                        " WHERE " +
                                        "`item_id` = %d",
                                        ItemAttr.TableName,
                                        itemAttr.getItemName(),
                                        itemAttr.getItemPoll(),
                                        itemAttr.getCreateTime(),
                                        itemAttr.getItemId());
            return this._db.update(sql);
        } catch(Exception ex) {
            return false;
        }
    }
   
    /**
     * 更新项目的投票总数 
     */
    public boolean updatePoll(int itemId) {
        String sql  = String.format("UPDATE `%s` SET " +
                            	    "`item_poll` = `item_poll` + 1" +
                            	    " WHERE " +
                            	    "`item_id` = %d",
                            	    ItemAttr.TableName,
                            	    itemId);
        
        return this.update(sql);
    }
   
    /**
     * 删除数据重载
     * 
     * @param int itemId 投票项目ID
     * @return boolean 是否成功
     */
    public boolean delete(int itemId) {
        String sql  = String.format("DELETE FROM `%s` WHERE `item_id` = %d",
                                    ItemAttr.TableName,
                                    itemId);
        return this._db.delete(sql);
    }
    
    /**
     * 得到投票项目信息对象
     */
    private ItemAttr genItemAttr() throws SQLException {
        ItemAttr itemAttr  = new ItemAttr();
        itemAttr.setItemId(this._resultSet.getInt("item_id"));
        itemAttr.setItemName(this._resultSet.getString("item_name"));
        itemAttr.setItemPoll(this._resultSet.getInt("item_poll"));
        itemAttr.setCreateTime(this._resultSet.getTimestamp("create_timE").toString());
        
        return itemAttr;
    }
   
    /**
     * 得到总的投票数 
     */
    public int getTotalPoll() {
        String sql  = String.format("SELECT " +
                            		"SUM(`item_poll`) as sum" +
                            		" FROM " +
                            		"`%s`;", ItemAttr.TableName);
        if(false == this.query(sql)) {
            return 1;
        }
        try {
            while(this._resultSet.next()) {
                return this._resultSet.getInt("sum");
            }
            return -1;
        } catch(SQLException ex) {
            System.out.println(ex.getMessage());
            return -1;
        }
    }
    
}
